Amazon Connect Customer Profilesでプロフィールの有無を判別して分岐させてみた

Amazon Connect Customer Profilesでプロフィールの有無を判別して分岐させてみた

Amazon Connect Customer Profilesの「お客様のプロフィール」ブロックを使って、顧客情報を参照し、フローを分岐させる方法を試してみました。
Clock Icon2024.08.06

こんにちは、洲崎です。
Amazon Connect Customer Profilesに登録されているプロフィールの有無を判別してフロー内で分岐してみました。

Amazon Connect Customer Profilesとは

Amazon Connect Customer Profilesは、各顧客の情報を一元化し、エージェントが通話しながら確認することができる機能です。
複数システムの顧客情報をAmazon Connect Customer Profilesにまとめることができます。
データソースは様々なものに対応しています。
Amazon S3も対応しているので、Amazon S3に顧客データをcsvでインポートすれば、AWSの機能のみで顧客情報を見ながら電話対応を行うことができます。
詳細や使い方についてはこちらの記事もご参照ください。
https://dev.classmethod.jp/articles/amazon-connect-customer-profiles-workshop-first-part-amazon-s3/

前提

Amazon Connect Customer Profilesと連係しておきます。
また、テストする電話番号でプロフィールを作成しておきます。
スクリーンショット 0006-08-06 15.22.18
↑の画面は、エージェントワークスペースの画面で、Customer Profilesに登録されている情報を確認することができます。

やってみる

フロー全体

検証用のフローは以下です。

スクリーンショット 0006-08-06 14.50.16

サンプルフロー(JSON)※クリックすると開きます
{
  "Version": "2019-10-30",
  "StartAction": "777b5f08-0484-44e5-86a0-ea66c4a67df0",
  "Metadata": {
    "entryPointPosition": {
      "x": 40,
      "y": 40
    },
    "ActionMetadata": {
      "777b5f08-0484-44e5-86a0-ea66c4a67df0": {
        "position": {
          "x": 156,
          "y": 40.8
        }
      },
      "6b211db3-3cc6-4c4e-83cc-34c0e5965fbe": {
        "position": {
          "x": 1008,
          "y": 252.8
        }
      },
      "faefc7e9-e9ff-4e1d-a34a-0b814017998c": {
        "position": {
          "x": 151.2,
          "y": 227.2
        },
        "overrideConsoleVoice": true
      },
      "50fd5b9f-a25c-4fa1-9048-b9af04f9c98e": {
        "position": {
          "x": 698.4,
          "y": 38.4
        }
      },
      "2257ce63-1ddb-4835-9d3e-d0afde54e0fc": {
        "position": {
          "x": 697.6,
          "y": 240
        }
      },
      "76999630-563e-48bf-aa4c-a19c0ca075bc": {
        "position": {
          "x": 698.4,
          "y": 434.4
        }
      },
      "3b678e8c-fac1-4897-990d-efc5bd7322fb": {
        "position": {
          "x": 698.4,
          "y": 624
        }
      },
      "8510cd8b-21ae-456d-937a-adf42d4162f4": {
        "position": {
          "x": 401.6,
          "y": 102.4
        },
        "parameters": {
          "ProfileRequestData": {
            "IdentifierName": {
              "displayName": "電話"
            },
            "IdentifierValue": {
              "useDynamic": true
            }
          }
        },
        "useDynamic": {
          "IdentifierName": true,
          "IdentifierValue": true
        },
        "customerProfilesAction": "GetCustomerProfile"
      }
    },
    "Annotations": [],
    "name": "Customer Profile test",
    "description": "",
    "type": "contactFlow",
    "status": "published",
    "hash": {}
  },
  "Actions": [
    {
      "Parameters": {
        "FlowLoggingBehavior": "Enabled"
      },
      "Identifier": "777b5f08-0484-44e5-86a0-ea66c4a67df0",
      "Type": "UpdateFlowLoggingBehavior",
      "Transitions": {
        "NextAction": "faefc7e9-e9ff-4e1d-a34a-0b814017998c"
      }
    },
    {
      "Parameters": {},
      "Identifier": "6b211db3-3cc6-4c4e-83cc-34c0e5965fbe",
      "Type": "DisconnectParticipant",
      "Transitions": {}
    },
    {
      "Parameters": {
        "TextToSpeechEngine": "Neural",
        "TextToSpeechStyle": "None",
        "TextToSpeechVoice": "Kazuha"
      },
      "Identifier": "faefc7e9-e9ff-4e1d-a34a-0b814017998c",
      "Type": "UpdateContactTextToSpeechVoice",
      "Transitions": {
        "NextAction": "8510cd8b-21ae-456d-937a-adf42d4162f4"
      }
    },
    {
      "Parameters": {
        "Text": "プロフィールを取得しました。"
      },
      "Identifier": "50fd5b9f-a25c-4fa1-9048-b9af04f9c98e",
      "Type": "MessageParticipant",
      "Transitions": {
        "NextAction": "6b211db3-3cc6-4c4e-83cc-34c0e5965fbe",
        "Errors": [
          {
            "NextAction": "6b211db3-3cc6-4c4e-83cc-34c0e5965fbe",
            "ErrorType": "NoMatchingError"
          }
        ]
      }
    },
    {
      "Parameters": {
        "Text": "エラーです"
      },
      "Identifier": "2257ce63-1ddb-4835-9d3e-d0afde54e0fc",
      "Type": "MessageParticipant",
      "Transitions": {
        "NextAction": "6b211db3-3cc6-4c4e-83cc-34c0e5965fbe",
        "Errors": [
          {
            "NextAction": "6b211db3-3cc6-4c4e-83cc-34c0e5965fbe",
            "ErrorType": "NoMatchingError"
          }
        ]
      }
    },
    {
      "Parameters": {
        "Text": "プロフィールが複数見つかりました。"
      },
      "Identifier": "76999630-563e-48bf-aa4c-a19c0ca075bc",
      "Type": "MessageParticipant",
      "Transitions": {
        "NextAction": "6b211db3-3cc6-4c4e-83cc-34c0e5965fbe",
        "Errors": [
          {
            "NextAction": "6b211db3-3cc6-4c4e-83cc-34c0e5965fbe",
            "ErrorType": "NoMatchingError"
          }
        ]
      }
    },
    {
      "Parameters": {
        "Text": "プロフィールが見つかりませんでした。"
      },
      "Identifier": "3b678e8c-fac1-4897-990d-efc5bd7322fb",
      "Type": "MessageParticipant",
      "Transitions": {
        "NextAction": "6b211db3-3cc6-4c4e-83cc-34c0e5965fbe",
        "Errors": [
          {
            "NextAction": "6b211db3-3cc6-4c4e-83cc-34c0e5965fbe",
            "ErrorType": "NoMatchingError"
          }
        ]
      }
    },
    {
      "Parameters": {
        "ProfileRequestData": {
          "IdentifierName": "_phone",
          "IdentifierValue": "$.CustomerEndpoint.Address"
        },
        "ProfileResponseData": []
      },
      "Identifier": "8510cd8b-21ae-456d-937a-adf42d4162f4",
      "Type": "GetCustomerProfile",
      "Transitions": {
        "NextAction": "50fd5b9f-a25c-4fa1-9048-b9af04f9c98e",
        "Errors": [
          {
            "NextAction": "2257ce63-1ddb-4835-9d3e-d0afde54e0fc",
            "ErrorType": "NoMatchingError"
          },
          {
            "NextAction": "76999630-563e-48bf-aa4c-a19c0ca075bc",
            "ErrorType": "MultipleFoundError"
          },
          {
            "NextAction": "3b678e8c-fac1-4897-990d-efc5bd7322fb",
            "ErrorType": "NoneFoundError"
          }
        ]
      }
    }
  ]
}

ログの記録と音声の設定を行った後に、「プロフィールを取得」ブロックで顧客の電話番号を認識し、以下のパターンごとに判別しアナウンスを変える形でテストしてみました。

  • 成功
    • Customer Profilesのプロフィールが1つあった場合
    • テキスト:プロフィールを取得しました。
  • Error
    • Customer Profiles、もしくはブロックのエラー
    • テキスト:エラーです。
  • 複数見つかりました
    • Customer Profilesのプロフィールが複数あった場合
    • テキスト:プロフィールが複数見つかりました。
  • 何も見つかりませんでした
    • Customer Profilesのプロフィールが見つからなかった場合
    • テキスト:プロフィールが見つかりませんでした。

「お客様のプロフィール」ブロック

「お客様のプロフィール」ブロックでは、以下の設定を入れています。

  • アクションを選択
    • プロフィールを取得
  • 検索識別子
    • 電話 = $.CustomerEndpoint.Address
  • レスポンスフィールド
    • なし
      スクリーンショット 0006-08-06 14.50.43

検索識別子の設定の詳細は以下です。

  • 検索識別子
    • 手動で設定:電話
  • 識別子の値
    • 名前空間:システム
    • キー:顧客の電話番号

※顧客の電話番号をキーとして、Customer Profilesに登録されているか検索します。
スクリーンショット 0006-08-06 14.50.58

今回は「プロフィールを取得」で、顧客情報の有無を判断する形で検証しましたが、レスポンスフィールドを利用すると、後続のフロープロックに属性を引き渡せるみたいです。

確認

実際にコールをかけてみて確認します。

共通して出力されるログ

Customer Profilesのブロックでは、共通して以下のログが出力されました。

{
    "Results": "MultipleFound",
    "ContactId": "fbba152d-f39a-490b-adf0-abc53753fc05",
    "ContactFlowId": "arn:aws:connect:ap-northeast-1:xxxxxxxxxxxx:instance/957ae315-6f56-4e06-b23b-xxxxxxxxxxxx/contact-flow/fb124270-bcc7-4d1d-852c-25c9f04b9840",
    "ContactFlowName": "Customer Profile test",
    "ContactFlowModuleType": "GetCustomerProfile",
    "Identifier": "8510cd8b-21ae-456d-937a-adf42d4162f4",
    "Timestamp": "2024-08-06T05:43:57.497Z",
    "Parameters": {
        "ProfileRequestData": [
            "IdentifierName=_phone",
            "IdentifierValue=+81xxxxxxxxxx"
        ]
    }
}

"Parameters"にある"ProfileRequestData"で、顧客の電話番号を認識しているのがわかります。

プロフィールが1つ見つかった場合

「プロフィールを取得しました」と想定通りのアナウンスが流れる形で分岐されました。

{
    "ContactId": "39d2ffac-4132-4f30-9cb1-7743b999f564",
    "ContactFlowId": "arn:aws:connect:ap-northeast-1:xxxxxxxxxxxx:instance/957ae315-6f56-4e06-b23b-xxxxxxxxxxxxx/contact-flow/fb124270-bcc7-4d1d-852c-25c9f04b9840",
    "ContactFlowName": "Customer Profile test",
    "ContactFlowModuleType": "PlayPrompt",
    "Identifier": "50fd5b9f-a25c-4fa1-9048-b9af04f9c98e",
    "Timestamp": "2024-08-06T05:46:22.690Z",
    "Parameters": {
        "TextToSpeechType": "text",
        "Text": "プロフィールを取得しました。",
        "Voice": "Kazuha"
    }
}

プロフィールが複数見つかった場合

1つの電話番号で複数のプロフィールが登録されている場合、「プロフィールが複数見つかりました」と想定通りのアナウンスが流れる形で分岐されました。

{
    "ContactId": "fbba152d-f39a-490b-adf0-abc53753fc05",
    "ContactFlowId": "arn:aws:connect:ap-northeast-1:xxxxxxxxxxxx:instance/957ae315-6f56-4e06-b23b-xxxxxxxxxxxx/contact-flow/fb124270-bcc7-4d1d-852c-25c9f04b9840",
    "ContactFlowName": "Customer Profile test",
    "ContactFlowModuleType": "PlayPrompt",
    "Identifier": "76999630-563e-48bf-aa4c-a19c0ca075bc",
    "Timestamp": "2024-08-06T05:43:57.825Z",
    "Parameters": {
        "TextToSpeechType": "text",
        "Text": "プロフィールが複数見つかりました。",
        "Voice": "Kazuha"
    }
}

プロフィールが見つからなかった場合

「プロフィールが見つかりませんでした」と想定通りのアナウンスが流れる形で分岐されました。

{
    "ContactId": "a84dfc59-04df-467c-af94-063ab6c39f01",
    "ContactFlowId": "arn:aws:connect:ap-northeast-1:xxxxxxxxxxxx:instance/957ae315-6f56-4e06-b23b-xxxxxxxxxxxx/contact-flow/fb124270-bcc7-4d1d-852c-25c9f04b9840",
    "ContactFlowName": "Customer Profile test",
    "ContactFlowModuleType": "PlayPrompt",
    "Identifier": "3b678e8c-fac1-4897-990d-efc5bd7322fb",
    "Timestamp": "2024-08-06T05:47:30.189Z",
    "Parameters": {
        "TextToSpeechType": "text",
        "Text": "プロフィールが見つかりませんでした。",
        "Voice": "Kazuha"
    }
}

最後に

Amazon Connect Customer Profilesに登録されているプロフィールの有無を判別してフロー内で分岐してみました。
一つのブロックで、顧客情報を参照してフロー内分岐できるので、とても良いです。
Lambdaなどプログラミングが不要なのも嬉しいですね。
電話と合わせて顧客情報と連係することを検討している場合、ぜひAmazon Connect Customer Profilesを試してみてください。

ではまた!コンサルティング部の洲崎でした。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.